package com.xn.app.muying.util;

import android.util.Log;
import android.widget.TextView;

import com.xn.app.muying.view.PickerView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/*
 * @author Msquirrel
 */
public class DateUtils {

    @SuppressWarnings("unused")
    private SimpleDateFormat sf = null;

    /* 获取系统时间 格式为："yyyy-MM-dd" */
    public static String getCurrentDate() {
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        return sf.format(d);
    }

    /* 获取系统时间 格式为："yyyy-MM-dd HH:mm" */
    public static String gettimeDate1() {
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        return sf.format(d);
    }

    /* 获取系统时间 格式为："yyyy-MM-dd HH:mm:ss" */
    public static String gettimeDate() {
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sf.format(d);
    }

    /* 获取系统时间 格式为："HH" */
    public static String getTime() {
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("HH");
        return sf.format(d);
    }

    /* 获取系统时间 格式为："MM月dd日" */
    public static String getTimeMD() {
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("MM月dd日");
        return sf.format(d);
    }


    /* 时间戳转换成字符窜   年  月  日*/
    public static String getDateToString(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy.MM.dd");
        return sf.format(d);
    }

    /* 时间戳转换成字符窜   月  日 */
    public static String getDateToStringMD(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("MM.dd");
        return sf.format(d);
    }

    /* 时间戳转换成字符窜 年  月  日  时 分*/
    public static String getDateToStringYMDHM(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        return sf.format(d);
    }

    /* 时间戳转换成字符窜  时分秒 */
    public static String getDateToStringTime(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("HH:mm:ss");
        return sf.format(d);
    }

    /* 时间戳转换成字符窜  时分*/
    public static String getDateToStringTimeHm(long time) {
        Date d = new Date(time);
        SimpleDateFormat sf = new SimpleDateFormat("HH:mm");
        return sf.format(d);
    }

    /* 将字符串转为时间戳 */
    public static long getStringToDate(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date.getTime();
    }

    /* 获取当前时间戳 年月日时分秒*/
    public static long getNumberDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        try {
            date = sdf.parse(gettimeDate());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date.getTime();
    }

    /* 获取当前时间戳 年月日*/
    public static long getNumberDate1() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        try {
            date = sdf.parse(gettimeDate());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date.getTime();
    }

    /* 将字符串转为时间戳 */
    public static long getStringToDate2(String time) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return date.getTime();
    }

    /**
     * 将字符串转换为Date格式
     *
     * @param strDate yyyy-MM-dd HH:mm:ss格式字符串
     * @return
     */
    public static Date strParseDate(String strDate) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = null;
        try {
            date = sdf.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }

    /**
     * 计算两个时间的时间间隔
     */
    public static String calculateDuration(Date start, Date end) {
        long duration = end.getTime() - start.getTime();
        int hour = (int) (duration / 3600 / 1000);
        int minute = (int) (duration % (3600 * 1000) / (60 * 1000));
        if (minute != 0 && hour != 0) {
            return hour + "小时" + minute + "分钟";
        }
        if (minute != 0 && hour == 0) {
            return minute + "分钟";
        }
        return "0分钟";
    }

    /**
     * 计算两个时间的时间间隔（分钟数）
     */
    public static int calculateDurationMinutes(Date start, Date end) {
        long duration = end.getTime() - start.getTime();
        int minute = (int) (duration / (60 * 1000));
        return minute;
    }

    /**
     * 获取分秒
     *
     * @param time 时间总长度
     * @return
     */
    public static String getTime(int time) {
        String str = "";
        int mtime = time;
        str = mtime / 60 + "分" + mtime % 60 + "秒";
        return str;
    }

    /**
     * 获取一个月有多少天
     *
     * @param YEAR  年
     * @param MONTH 月
     * @return
     */
    public static int getMonthDay(int YEAR, int MONTH) {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, YEAR);
        cal.set(Calendar.MONTH, MONTH);//Java月份才0开始算
        int dateOfMonth = cal.getActualMaximum(Calendar.DATE);
        return dateOfMonth;
    }

    /**
     * 组装时间控件
     *
     * @param yearPV  年控件
     * @param MonthPV 月控件
     * @param dataPV  日控件
     * @param text1
     * @param text2
     * @param text3
     */
    //获取时间
    Calendar cal = Calendar.getInstance();
    //保存数据的集合
    List<String> data = new ArrayList<>();
    //设置年
    //当前年
    int year = cal.get(Calendar.YEAR);
    //记录选项
    int MONTH = 0;
    int DAY = 0;
    public void setTimeyMd(PickerView yearPV, PickerView MonthPV, final PickerView dataPV, TextView text1, TextView text2, TextView text3) {
        text1.setText("年");
        text2.setText("月");
        text3.setText("日");

        for (int i = year; i <= year + 1; i++) {
            data.add(i + "");
        }

        yearPV.setData(data);
        yearPV.setSelected(0);
        //设置月
        data = new ArrayList<>();
        for (int i = 1; i <= 12; i++) {
            if(i<10){
                data.add("0"+i);
            }else{
                data.add(i + "");
            }
            if (i == (cal.get(Calendar.MONTH))) {
                MONTH = i;
            }
        }
        MonthPV.setData(data);
        MonthPV.setSelected(MONTH);
        //设置日
        data = new ArrayList<>();
        for (int i = 1; i <= getMonthDay(year, MONTH); i++) {
            if(i<10){
                data.add("0"+i);
            }else{
                data.add(i + "");
            }
            if (i == cal.get(Calendar.DAY_OF_MONTH) - 1) {
                DAY = i;
            }
        }
        dataPV.setData(data);
        dataPV.setSelected(DAY);
        //监听月份滑动
        MonthPV.setOnSelectListener(new PickerView.onSelectListener() {
            @Override
            public void onSelect(String text) {
                //设置日
                data = new ArrayList<>();
                for (int i = 1; i <= getMonthDay(year, Integer.parseInt(text)-1); i++) {
                    if(i<10){
                        data.add("0"+i);
                    }else{
                        data.add(i + "");
                    }
                    if (i == cal.get(Calendar.DAY_OF_MONTH) - 1) {
                        DAY = i;
                    }
                }
                dataPV.setData(data);
            }
        });
    }

    /**
     * 组装时间控件
     *
     * @param dPV 天控件
     * @param HPV 时控件
     * @param mPV 分控件
     * @param text1
     * @param text2
     * @param text3
     */
    public static void setTimeHms(PickerView dPV, PickerView HPV, PickerView mPV, TextView text1, TextView text2, TextView text3) {
        text1.setText("");
        text2.setText("时");
        text3.setText("分");
        //获取时间
        Calendar cal = Calendar.getInstance();
        //保存数据的集合
        List<String> data = new ArrayList<>();
        //设置年
        //当前年
        int year = cal.get(Calendar.YEAR);
        data.add("前一天");
        data.add("当天");
        dPV.setData(data);
        dPV.setSelected(1);
        //设置小时
        data = new ArrayList<>();
        for (int i = 1; i <= 24; i++) {
            if(i<10){
                data.add("0"+i);
            }else{
                data.add(i + "");
            }
        }
        HPV.setData(data);
        HPV.setSelected(7);
        //设置分钟
        data = new ArrayList<>();
        data.add("59");
        for (int i = 0; i <= 58; i++) {
            if(i<10){
                data.add("0"+i);
            }else{
                data.add(i + "");
            }
        }
        mPV.setData(data);
        mPV.setSelected(1);
    }

    /**
     * 获取指定日期的前一天的日期
     * @param time  指定的时间
     */
    public static String getYesterday(String time){
        String s="";
        String str[]=time.split("-");
        Calendar ca = Calendar.getInstance();//得到一个Calendar的实例
        ca.set(Integer.parseInt(str[0]), Integer.parseInt(str[1])-1, Integer.parseInt(str[2]));//月份是从0开始的，所以11表示12月
        ca.setTime(new Date(ca.getTime().getTime()-AppConstant.oneDay));
        Date lastMonth = ca.getTime(); //结果
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        s=sf.format(lastMonth);
        return s;
    }


}